iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0
自我挑戰組

來寫看看app好了! Swift探索之旅系列 第 20

Day#20 Dependencies & conversation UI

  • 分享至 

  • xImage
  •  

前言

今天來加入更多的Dependencies,以及聊天開發的準備

Cocoapods

那麼我們先來新增引用的函式庫。

在Podfile新增以下的指令,然後下載。

pod 'MessageKit'
pod 'JGProgressHUD'
pod 'RealmSwift'
pod 'SDWebImage'

先確認此時專案是可以complie的!

ConversationViewController

接著我們在對話的畫面新增tableView

private let tableView: UITableView = {
    let table = UITableView()
    table.isHidden = true // hide when there's no conversation
    table.register(UITableViewCell.self,
                   forCellReuseIdentifier: "cell")
    return table
}()

當沒有對話可以顯示的時候,我們將畫面的table view藏起來,並放上noConversationLabel作為提示畫面。

private let noConversationLabel: UILabel = {
    let label = UILabel()
    label.text = "No conversations yet."
    label.textAlignment = .center
    label.textColor = .gray
    label.font = .systemFont(ofSize: 21, weight: .medium)
    label.isHidden = true
    return label
}()

viewDidLoad

接著在view load進來的時候,把sub view放到stake中

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(tableView)
    view.addSubview(noConversationLabel)
    setupTableView()
    fetchConversations()
}
private func setupTableView() {
    tableView.delegate = self
    tableView.dataSource = self
}

private func fetchConversations() {
    tableView.isHidden = false
}

前幾次文章有提到,我們在進行table view或是各種元件的呈現,會需要指派一個對象,此時我們將此對象指派給自己,不過就需要加上繼承,因為目前UITableView無法作為指派的對象。

而我們也提過,與主要邏輯無關的程式結構,可以另外使用extension來撰寫。

extension ConversationViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = "Hello world"
        cell.accessoryType = .disclosureIndicator // ">" at the right
        return cell
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        let vc = ChatViewController()
        vc.title = "Jenny Smith"
        vc.navigationItem.largeTitleDisplayMode = .never
        navigationController?.pushViewController(vc, animated: true)
    }
}

在此,轉換後的charViewController,因為還沒有資料跟畫面,我們先個假資料XD

好的!那今天就到這邊,有比前幾天的進度好一些些><

若上述內容有誤或可以改進的部分,歡迎留言以及提出任何指教~
謝謝 (´・∀・`)


上一篇
Day#19 Firebase database 101
下一篇
Day#21 Chat
系列文
來寫看看app好了! Swift探索之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言